SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[parResumenPOF]  

@CUISE INT,
@FechaHasta VARCHAR(10)

AS
SET NOCOUNT ON
SET DATEFORMAT DMY

DECLARE @ResumenPOF TABLE (Organizacion VARCHAR(60), IDOrganizacion INT, CUE INT, CUISE INT, IDPlaza INT, Partida VARCHAR(50), RegimenSalarial VARCHAR(20), Cargo VARCHAR(60), Cantidad INT, CantPuntos DECIMAL(12,2), Registros INT)


INSERT INTO @ResumenPOF 

SELECT O.Nombre Organizacion, O.IdOrganizaciones, O.CUE, 
    O.CUISE, P.idPlaza, ' '+ pp.mnemo+'-Subsidiado '+Convert(Varchar, IsNull(PorcentajeSubsidio,0))+'%' Partida, 
    RS.Descripcion RegimenSalarial, convert(varchar,c.idcargo)+'-'+convert(varchar,C.Cargo) Cargo,
    CASE RS.Descripcion WHEN 'Cargo' THEN COUNT(*) 
    WHEN 'Horas' THEN SUM(SA.Horas) END AS Cantidad, 
    CASE RS.Descripcion WHEN 'Cargo' THEN COUNT(*)*c.puntos 
    WHEN 'Horas' THEN SUM(SA.Horas)*c.puntos END AS CantPuntos,
    COUNT(*)
FROM Tb_CargosSalariales C
INNER JOIN tb_ServiciosAgentes SA ON C.IdCargo = SA.CargoSalarial 
INNER JOIN tb_RegimenSalarial RS ON RS.IdRegimenSalarial = C.RegimenSalarial
INNER JOIN tb_SubServiciosAgentes SS On idServicioAgente = ServicioAgente
INNER JOIN tb_Plazas P On idPlaza = Plaza
INNER JOIN tb_PartidasPresupuestarias PP ON p.Presupuesto = PP.IdPartida 
INNER JOIN tb_Organizaciones O ON O.IdOrganizaciones = p.organizacion 
WHERE --TipoDEServicio =1 AND 
  PP.IdPartida<>4
 AND (SA.RegimenLaboral = 12 OR
    SA.Regimenlaboral = 17 OR
    SA.RegimenLaboral = 16) AND (SA.SituacionRevista = 1 OR
    SA.SituacionRevista = 2) AND @FechaHasta BETWEEN 
    SA.FechaAlta AND ISNULL(Sa.FechaBaja, GetDate())
 AND SS.baja= 'N'
 AND O.CUISE = @CUISE
 GROUP BY O.Nombre, O.IdOrganizaciones, O.CUE, O.Cuise, P.idPlaza, 
    P.PorcentajeSubsidio, RS.Descripcion,c.idcargo, C.Cargo,pp.mnemo,pp.idpartida,c.puntos  
 
UNION --plazas sin titulares o interinos (o sea vacias o con suplentes unicamente)


SELECT O.Nombre Organizacion, O.IdOrganizaciones, O.CUE,
    O.CUISE,P.idPlaza, 'SinTitOInt-'+pp.mnemo+'-Subsidiado '+Convert(Varchar, IsNull(PorcentajeSubsidio,0))+'%' Partida, 
    RS.Descripcion RegimenSalarial,  convert(varchar,c.idcargo)+'-'+convert(varchar,C.Cargo) Cargo, 
    CASE RS.Descripcion WHEN 'Cargo' THEN COUNT(*) 
    WHEN 'Horas' THEN SUM(p.Horas) END AS Cantidad,
    CASE RS.Descripcion WHEN 'Cargo' THEN COUNT(*)*c.puntos 
    WHEN 'Horas' THEN SUM(p.Horas)*c.puntos END AS CantPuntos,
    COUNT(*)
FROM Tb_CargosSalariales C INNER JOIN  tb_plazas P ON C.IdCargo = p.CargoSalarialDefault 
INNER JOIN tb_PartidasPresupuestarias PP ON p.Presupuesto = PP.IdPartida 
INNER JOIN tb_RegimenSalarial RS ON RS.IdRegimenSalarial = C.RegimenSalarial
INNER JOIN tb_Organizaciones O ON O.IdOrganizaciones = p.organizacion 
WHERE
	@FechaHasta BETWEEN P.FechaAlta 
	AND ISNULL(P.FechaBaja, GetDate())
	AND PP.idpartida<>4 
	AND P.idplaza NOT IN (SELECT Plaza FROM
              Tb_SubserviciosAgentes SS INNER JOIN Tb_ServiciosAgentes SA on SA.IdServicioAgente=SS.ServicioAgente
              WHERE --(sa.TipoDEServicio IN  (1)) AND 
    	          	 (SA.SituacionRevista = 1 OR  SA.SituacionRevista = 2)
			     AND @FechaHasta BETWEEN SA.FechaAlta AND ISNULL(SA.FechaBaja, GetDate())
	    		 AND SS.baja= 'N')
	AND O.CUISE = @CUISE

	GROUP BY O.Nombre, O.IdOrganizaciones, O.CUE, O.Cuise, P.IdPlaza,
	P.PorcentajeSubsidio, RS.Descripcion, C.Cargo,  C.idcargo, PP.mnemo, PP.idpartida, C.puntos

ORDER BY Partida, Cargo


SELECT Organizacion , IDOrganizacion , CUE , CUISE , 
	Partida , RegimenSalarial , Cargo , SUM((Cantidad/Registros)) Cantidad, SUM((CantPuntos/Registros)) CantPuntos
  FROM @ResumenPOF
  GROUP BY Organizacion , IDOrganizacion , CUE , CUISE , 
   Partida , RegimenSalarial , Cargo
GO
